package com.googlecode.gwt.charts.client.util; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import com.google.gwt.core.client.JsArrayBoolean; import com.google.gwt.core.client.JsArrayInteger; import com.google.gwt.core.client.JsArrayMixed; import com.google.gwt.core.client.JsArrayNumber; import com.google.gwt.core.client.JsArrayString; import com.google.gwt.core.client.JsDate; import java.util.Date; import java.util.List; /** * A set of utility array methods. */ public class ArrayHelper { /** * Converts a java boolean array into a javascript array (JsArray). * * @param array the array containing values * @return a corresponding JsArrayBoolean */ public static JsArrayBoolean createArray(boolean... array) { JsArrayBoolean jsArray = JavaScriptObject.createArray().cast(); for (int i = 0; i < array.length; i++) { jsArray.set(i, array[i]); } return jsArray; } /** * Converts a java date array into a javascript array (JsArray). * * @param array the array containing values * @return a corresponding JsArray */ public static JsArray<JsDate> createArray(Date... array) { JsArray<JsDate> jsArray = JavaScriptObject.createArray().cast(); for (int i = 0; i < array.length; i++) { jsArray.set(i, DateHelper.getJsDate(array[i])); } return jsArray; } /** * Converts a java double array into a javascript array (JsArray). * * @param array the array containing values * @return a corresponding JsArrayNumber */ public static JsArrayNumber createArray(double... array) { JsArrayNumber jsArray = JavaScriptObject.createArray().cast(); for (int i = 0; i < array.length; i++) { jsArray.set(i, array[i]); } return jsArray; } /** * Converts a java object array into a javascript array (JsArray). * * @param <E> the type of array * @param array the array containing values * @return a corresponding JsArray */ @SafeVarargs public static <E extends JavaScriptObject> JsArray<E> createArray(E... array) { JsArray<E> jsArray = JavaScriptObject.createArray().cast(); for (int i = 0; i < array.length; i++) { jsArray.set(i, array[i]); } return jsArray; } /** * Converts a java int array into a javascript array (JsArray). * * @param array the array containing values * @return a corresponding JsArrayNumber */ public static JsArrayInteger createArray(int... array) { JsArrayInteger jsArray = JavaScriptObject.createArray().cast(); for (int i = 0; i < array.length; i++) { jsArray.set(i, array[i]); } return jsArray; } /** * Converts a list of java objects into a javascript array (JsArray). * * @param <E> the type of array * @param array the array containing values * @return a corresponding JsArray */ public static <E extends JavaScriptObject> JsArray<E> createArray(List<E> array) { JsArray<E> jsArray = JavaScriptObject.createArray().cast(); for (E object : array) { jsArray.push(object); } return jsArray; } /** * Converts a java object array into a mixed javascript array (JsArrayMixed). * * @param array the array containing values * @return a corresponding JsArrayMixed */ public static JsArrayMixed createArray(Object... array) { JsArrayMixed jsArray = JavaScriptObject.createArray().cast(); for (int i = 0; i < array.length; i++) { Object object = array[i]; if (object == null) { jsArray.set(i, (String) null); } else if (object instanceof Integer) { arraySet(jsArray, i, ((Integer) object).intValue()); } else if (object instanceof Double) { arraySet(jsArray, i, ((Double) object).doubleValue()); } else if (object instanceof String) { arraySet(jsArray, i, (String) object); } else if (object instanceof Date) { jsArray.set(i, DateHelper.getJsDate((Date) object)); } else if (object instanceof JavaScriptObject) { jsArray.set(i, (JavaScriptObject) object); } else { throw new RuntimeException("invalid value type"); } } return jsArray; } /** * Converts a java String array into a javascript array (JsArray). * * @param array the array containing values * @return a corresponding JsArrayString */ public static JsArrayString createArray(String... array) { JsArrayString jsArray = JavaScriptObject.createArray().cast(); for (int i = 0; i < array.length; i++) { jsArray.set(i, array[i]); } return jsArray; } private static final native void arraySet(JsArrayMixed array, int index, double value) /*-{ array[index] = value; }-*/; private static final native void arraySet(JsArrayMixed array, int index, int value) /*-{ array[index] = value; }-*/; private static final native void arraySet(JsArrayMixed array, int index, String value) /*-{ array[index] = value; }-*/; }